<?php

class Avaluos_model extends CI_Model {

    function __construct() {
        parent::__construct();
    }

    public function crear($proyectoId, $numAvaluo, $proposito, $isMobile = false) {
        /* Crea un avaluo */
        $retorna = array();
        $proposito = addslashes($proposito);
        $sql = "select * from proyectos where proyectoId = '$proyectoId'";
        if ($this->db->query($sql)->num_rows() > 0) {
            $sql = "insert into avaluos(avaluoNumero,proyectoId,usuarioCreo,avaluoFechaCreo,avaluoProposito) values('$numAvaluo','$proyectoId','1',now(),'$proposito')";
            $this->db->query($sql);
            $retorna["error"] = 0;
        } else {
            $retorna["error"] = 1;
            $retorna["mensaje"] = "El proyecto elegido no existe";
        }
        if ($isMobile && $retorna["error"] == 0)
            return $this->db->insert_id();
        else
            return $retorna;
    }

//fin public function crear($proyectoId,$numAvaluo) {

    public function consulta($proyecto = null, $edita = null, $aprobado = null) {
        if (is_numeric($proyecto)) {
            $where = "";
            if ($aprobado != "") {
                $where = " and avaluoAprobado = 'Aprobado' ";
            }
            $result = $this->db->query("select avaluoId,avaluoNumero,avaluoFechaCreo from avaluos where proyectoId = $proyecto $where order by avaluoNumero,avaluoFechaCreo");
            $options = "<option value=''>Elija</option>";
            if ($result->num_rows() > 0) {
                foreach ($result->result() as $row) {
                    $options .= "<option value='{$row->avaluoId}'>{$row->avaluoNumero}-{$row->avaluoFechaCreo}</option>";
                }
            }
            return $options;
        } else {
            if ($edita == "edita")
                return $this->db->query("select * from avaluos  order by avaluoNumero");
            else {
                return $this->db->query("select * from avaluos where avaluoAprobado = 'No' order by avaluoNumero");
            }
        }
    }

//fin public function consulta() {

    public function aprobar($avaluoId, $observacion) {
        $observacion = addslashes($observacion);
        $sql = "update avaluos set avaluoAprobado = 'Aprobado', avaluoObservacion = '$observacion' where avaluoId = $avaluoId";
        $this->db->query($sql);
        return;
    }

//fin public function aprobar($avaluoId,$observacion){

    public function estaAprobado($visitaId) {
        $sql = "select ava.avaluoAprobado from visitas vi
            inner join avaluos ava on ava.avaluoId = vi.avaluoId
            where vi.visitaId = $visitaId";
        $result = $this->db->query($sql)->result();
        if ($result[0]->avaluoAprobado == "Aprobado")
            return 'Si';
        else
            return 'No';
    }

//fin public function estaAprobado($visitaId){

    public function validaNumAvaluosPermitido($proyectoId,$opc = false) {
        $suma = ($opc)?1:0;
        $sql = "select (count(*) + $suma) as total from avaluos where proyectoId = $proyectoId";
        $result = $this->db->query($sql)->result();
        $totProyecto = $result[0]->total;
        $sql = "select proyectoNumAvaluos from proyectos where proyectoId = $proyectoId";
        $result = $this->db->query($sql)->result();
        if ($totProyecto < $result[0]->proyectoNumAvaluos)
            return true;
        else
            return false;
    }

    public function crud($oper, $proyectoNombre, $avaluoNumero) {
        $sql = "";
        $parametros = array();
        $parametros["ok"] = "ok";
        switch ($oper) {
            case 'add':
                if ($this->validaNumAvaluosPermitido($proyectoNombre)) {
                    $sql = "insert into avaluos(avaluoNumero,proyectoId,avaluoFechaCreo) ";
                    $sql .= "values ('$avaluoNumero','$proyectoNombre',now())";
                } else {
                    $parametros["ok"] = "no";
                    $parametros["error"] = "Ha excedido el número de avaluos para este proyecto";
                }
                break;
            case 'edit':
                $id = $this->input->post("id");
                if (!is_numeric($id) || trim($id) == "")
                    exit("Parametros incorrectos");
                $sql = "select avaluoAprobado,proyectoId from avaluos where avaluoId = $id";
                $result = $this->db->query($sql)->result();
                if ($result[0]->avaluoAprobado == "Aprobado") {
                    $parametros["ok"] = "no";
                    $parametros["error"] = "No es posible editar avalúos aprobados";
                } else {
                    if ($result[0]->proyectoId != $proyectoNombre && !$this->validaNumAvaluosPermitido($proyectoNombre, true)) {
                        $parametros["ok"] = "no";
                        $parametros["error"] = "No puede asignar el avalúo a este proyecto, puesto que éste ha excedido el número de avaluos";
                    } else {
                        $sql = "update avaluos set ";
                        $sql .= "avaluoNumero = '$avaluoNumero',";
                        $sql .= "proyectoId = '$proyectoNombre',";
                        $sql .= "avaluoFechaEdito = now() ";
                        $sql .= " where avaluoId = $id";
                    }
                }
                break;
            case 'del':
                $id = $this->input->post("id");
                if (!is_numeric($id) || trim($id) == "")
                    exit("Parametros incorrectos");
                $sql = "select avaluoAprobado,proyectoId from avaluos where avaluoId = $id";
                $result = $this->db->query($sql)->result();
                if ($result[0]->avaluoAprobado == "Aprobado") {
                    $parametros["ok"] = "no";
                    $parametros["error"] = "No es posible eliminar avalúos aprobados";
                } else {
                    $sql = "select count(*) as total from avaluos a
                            inner join visitas v on v.avaluoId = a.avaluoId where a.avaluoId = $id";
                    $result = $this->db->query($sql)->result();
                    if ($result[0]->total > 0) {
                        $parametros["ok"] = "no";
                        $parametros["error"] = "No es posible eliminar éste avalúo, tiene visitas asociadas";
                    } else {
                        $sql = "delete from avaluos where avaluoId = $id";
                    }
                }
                break;
        } //fin switch($this->input->post("opper")){
        if ($parametros["ok"] === "ok")
            return $this->db->query($sql);
        echo json_encode($parametros);
    }

//fin public function crud(){
}

//fin class
?>
